/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Welcome;

import RMS.EstablishClientID;
import java.util.Vector;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class HDTopMenu extends Canvas {

    private int dem;
    private int[] memory;
    private int x = 0;
    protected int linePadding = 1;
    protected int margin = 2;
    protected int padding = 2;
    protected Font font;
    protected int bgColor = 0x00EA9414;
    protected int borderWidth = 0;
    // will contain item splitted lines
    String[][] itemLines = null;
    // will hold items image parts
    Image[] images = null;
    // will hold selected item index
    public int selectedItem = 0;
    // these will hold item graphical properties
    int[] itemsTop = null;
    int[] itemsHeight = null;
    // these will hold List vertical scrolling
    int scrollTop = 0;
    final int SCROLL_STEP = 40;
    private boolean change = true;
    private int tungDoDau;
    private int TextHeight;
    private int i, instanceKeyCode;
    private Image bufferImage;
    private Start midlet;

    public HDTopMenu(Start midlet) {

        this.setFullScreenMode(true);
        this.midlet = midlet;

        String[] items = new String[8];
        items[0] = "Đuổi Hình Bắt Chữ v1.0";
        items[1] = "Đây là game được mô phỏng dựa trên trò chơi Đuổi hình bắt chữ trên truyền hình. Điểm khác biệt "
                + " là trong mỗi màn chơi người chơi phải trả lời ba hình lớn ,mỗi hình có số miếng ghép khác nhau. "
                + "Người chơi được quyền chọn miếng ghép nhỏ để trả lời mở ra gợi ý cho hình lớn.";
        items[2] = "Thao tác";
        items[3] = " Chọn một miếng ghép để trả lời một hình nhỏ. Mỗi hình nhỏ chỉ được phép được trả lời một lần. "
                + "Mở các miếng ghép để khám phá hình lớn.Bạn có 3 cơ hội để giải hình lớn. "
                + "Giải đúng hình lớn sẽ sang màn tiếp theo. ";
        items[4] = "Sử dụng phím Menu phải và trái (hoac phim 1,3) trên điện thoại để chọn tính năng xuất hiện tương ứng trên màn hình.";
        items[5] = "Sử dụng các phím điều hướng (hoặc phím 2,4,6,8) để di chuyển .";
        items[6] = "Sử dụng phím Ok (hoặc phím 5) để xác nhận.";
        items[7] = "Chúc các bạn vui vẻ !";

        bufferImage = Image.createImage(getWidth(), getHeight());
        itemLines = new String[items.length][];

        itemsTop = new int[itemLines.length];
        itemsHeight = new int[itemLines.length];

        for (i = 0; i < itemLines.length; i++) {
            font = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);

            int w = getItemWidth();
            itemLines[i] = getTextRows((String) items[i], font, w);
        }
    }

    public int getItemWidth() {
        return getWidth() - 2 * borderWidth - 2 * padding - 2 * margin - 3;
    }

    public int getSelectItem() {
        return selectedItem;
    }

    Image getImage(int index) {
        return images != null && images.length > index ? images[index] : null;
    }

    public int returnTopHeight(int selected) {
        Image imagePart = getImage(itemLines.length - 1);
        if (selected < itemLines.length - 1) {
            return itemsTop[selected + 1];
        } else {
            if (imagePart == null) {

                return itemsTop[itemLines.length - 1] + itemsHeight[itemLines.length - 1] + 8;
            } else {
                ////.out.print(" anh va chu " + imagePart.getHeight() + " " + itemsHeight[itemLines.length - 1]);
                if (imagePart.getHeight() > itemsHeight[itemLines.length - 1]) {
                    return imagePart.getHeight() + itemsTop[itemLines.length - 1] + 8;
                } else {
                    return itemsTop[itemLines.length - 1] + itemsHeight[itemLines.length - 1] + 8;
                }
            }
        }


    }

    protected void pointerPressed(int x, int y) {
        tungDoDau = y;

        if (x <= getWidth() && x >= getWidth() - font.stringWidth("Thoát") - 10) {
            if (y <= getHeight() && y >= getHeight() - font.getHeight() - 10) {
                midlet.disManager.popDisplayable();
            }
        }
    }

    protected void pointerReleased(int k, int y) {
        change = false;
        x = x + y - tungDoDau;
        if (x < getHeight() - 30 - 3 * font.getHeight() - TextHeight) {
            x = getHeight() - 30 - 3 * font.getHeight() - TextHeight;
        }
        if (x > 0) {
            x = 0;
        }
//        if (x < 0 - returnTopHeight(itemLines.length - 1) + getHeight()) {
//            if (getHeight() < returnTopHeight(itemLines.length - 1)) {
//                x = -returnTopHeight(itemLines.length - 1) - 32 + getHeight();
//
//            } else {
//                x = 0;
//            }
//        }
        repaint();

    }

    public String[] getTextRows(String text, Font font, int width) {
        char SPACE_CHAR = ' ';
//
        String VOID_STRING = "";
        String newLine = "<br />";
//
        int prevIndex = 0;
        int currIndex = text.indexOf(SPACE_CHAR);

        Vector rowsVector = new Vector();

        StringBuffer stringBuffer = new StringBuffer();

        String currentToken;

        String currentRowText = VOID_STRING;

        while (prevIndex != -1) {

//
            int startCharIndex = prevIndex == 0 ? prevIndex : prevIndex + 1;

            if (currIndex != -1) {
                currentToken = text.substring(startCharIndex, currIndex);
            } else {
                currentToken = text.substring(startCharIndex);
            }

            prevIndex = currIndex;

            currIndex = text.indexOf(SPACE_CHAR, prevIndex + 1);

            if (currentToken.length() == 0) {
                continue;
            }

            if (stringBuffer.length() > 0) {
                stringBuffer.append(SPACE_CHAR);
            }
            stringBuffer.append(currentToken);
//
            if (stringBuffer.toString().indexOf(newLine) >= 0) {
                String temp = stringBuffer.toString();

                stringBuffer.setLength(0);
                currentRowText = temp.substring(0, temp.indexOf(newLine));
                stringBuffer.append(temp.substring(temp.indexOf(newLine) + 8));
                if (currentRowText.length() > 0) {

                    rowsVector.addElement(currentRowText);
                    rowsVector.addElement("");
                }
                currentRowText = VOID_STRING;
                currentRowText = stringBuffer.toString();
//
            }

            if (font.stringWidth(stringBuffer.toString()) > width) {
//
                if (currentRowText.length() > 0) {

                    rowsVector.addElement(currentRowText);
//
                }
//
                stringBuffer.setLength(0);
//
                currentRowText = VOID_STRING;

                stringBuffer.append(currentToken);

                currentRowText = stringBuffer.toString();
            } else {
                currentRowText = stringBuffer.toString();
            }
//
        }
        if (currentRowText.length() > 0) {
            rowsVector.addElement(currentRowText);
        }
        String[] rowsArray = new String[rowsVector.size()];

        rowsVector.copyInto(rowsArray);

//
        return rowsArray;
    }

    public void paint(Graphics g) {
        renderTheWorld();
        g.drawImage(bufferImage, 0, 0, Graphics.LEFT | Graphics.TOP);
    }

    protected void renderTheWorld() {
        Graphics g = bufferImage.getGraphics();
        g.setColor(0x00FCF93A);
        g.fillRect(0, 0, getWidth(), getHeight());

        int top = 0;
        font = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
        g.translate(0, font.getHeight() + 4);

        // loop List items
        for (int i = 0; i < itemLines.length; i++) {
            System.out.println("i=" + i);
            if (i == 0 || i == 2 || i == 7) {
                g.setColor(0xFA2A2A);
                font = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
                g.setFont(font);
            } else {
                g.setColor(0x3F8215);
                font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
                g.setFont(font);
            }

            g.translate(0, -scrollTop);

            int itemRows = itemLines[i].length;

            Image imagePart = getImage(i);

            int itemHeight = itemRows * font.getHeight() + linePadding * (itemRows - 1);
            itemsTop[i] = top;
            itemsHeight[i] = itemHeight;
            if (imagePart != null && imagePart.getHeight() > itemHeight) {
                itemHeight = imagePart.getHeight();
            }
            itemHeight += padding + borderWidth + margin;
            if (change) {
                TextHeight += itemHeight;
            }
            g.translate(0, top);

            int textLeft = 0;

            for (int j = 0; j < itemRows; j++) {
                if (j == 0) {
                    textLeft = 10;
                } else {
                    textLeft = 5;
                }
                g.drawString(itemLines[i][j], textLeft, margin + borderWidth + padding
                        + j * (linePadding + font.getHeight()) + x, Graphics.TOP | Graphics.LEFT);
//
            }
            g.translate(0, -top);
            top += itemHeight + 2 * margin;
        }

        font = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
        g.setFont(font);
        g.translate(0, -font.getHeight() - 4);
        g.setColor(0x00EA9414);
        g.fillRect(0, 0, getWidth(), font.getHeight() + 4);
        g.fillRect(0, getHeight() - font.getHeight() - 4, getWidth(), font.getHeight() + 4);
        g.setColor(0xffffff);
        g.drawString("Thông tin", 2, 2, Graphics.LEFT | Graphics.TOP);
        g.drawLine(0, getHeight() - font.getHeight() - 4, getWidth(), getHeight() - font.getHeight() - 4);
        g.drawString("Thoát", getWidth() - 1, getHeight() - 2, Graphics.RIGHT | Graphics.BOTTOM);
        g.translate(0, scrollTop);
    }

    protected void keyPressed(int keyCode) {
        instanceKeyCode = KeyCodeAdapter.getInstance().adoptKeyCode(keyCode);
        switch (instanceKeyCode) {
            case KeyCodeAdapter.KEY_8:
            case KeyCodeAdapter.DOWN_KEY:
                if (TextHeight > (getHeight() - 3 * font.getHeight() - 12)) {
                    change = false;
                    if (x + TextHeight - (getHeight() - 4 * font.getHeight() - 12) > 0) {
                        x -= 10;
                    }
                    repaint();
                }
                break;

            case KeyCodeAdapter.KEY_2:
            case KeyCodeAdapter.UP_KEY:
                if (TextHeight > (getHeight() - 2 * font.getHeight() - 8)) {
                    change = false;
                    if (x < 0) {
                        x += 10;
                    }
                    repaint();
                }
                break;

            case KeyCodeAdapter.KEY_5:
            case KeyCodeAdapter.SOFT_KEY_RIGHT:
            case KeyCodeAdapter.CENTER_KEY:
                midlet.disManager.popDisplayable();
                break;
        }
    }
}
